modelbutton: Use indicator state for button gadget if iconic
authorTimm Bäder <mail@baedert.org>
Wed, 27 Jan 2016 15:32:39 +0000 (16:32 +0100)
committerTimm Bäder <mail@baedert.org>
Wed, 27 Jan 2016 15:34:22 +0000 (16:34 +0100)
gtk/gtkmodelbutton.c

index 1446aab0039cbb18cd653eecb41f1d4fc0d49849..cbeab657834947d09a579208ebcf39f9a8d5a3f9 100644 (file)
@@ -197,9 +197,11 @@ static void
 gtk_model_button_update_state (GtkModelButton *button)
 {
   GtkStateFlags state;
+  GtkStateFlags indicator_state;
   GtkCssImageBuiltinType image_type = GTK_CSS_IMAGE_BUILTIN_NONE;
 
   state = gtk_widget_get_state_flags (GTK_WIDGET (button));
+  indicator_state = state;
 
   gtk_css_gadget_set_state (button->gadget, state);
 
@@ -207,12 +209,12 @@ gtk_model_button_update_state (GtkModelButton *button)
     {
       if (button->active && !button->menu_name)
         {
-          state |= GTK_STATE_FLAG_CHECKED;
+          indicator_state |= GTK_STATE_FLAG_CHECKED;
           image_type = GTK_CSS_IMAGE_BUILTIN_CHECK_CHECKED;
         }
       else
         {
-          state &= ~GTK_STATE_FLAG_CHECKED;
+          indicator_state &= ~GTK_STATE_FLAG_CHECKED;
           image_type = GTK_CSS_IMAGE_BUILTIN_CHECK;
         }
     }
@@ -220,12 +222,12 @@ gtk_model_button_update_state (GtkModelButton *button)
     {
       if (button->active && !button->menu_name)
         {
-          state |= GTK_STATE_FLAG_CHECKED;
+          indicator_state |= GTK_STATE_FLAG_CHECKED;
           image_type = GTK_CSS_IMAGE_BUILTIN_OPTION_CHECKED;
         }
       else
         {
-          state &= ~GTK_STATE_FLAG_CHECKED;
+          indicator_state &= ~GTK_STATE_FLAG_CHECKED;
           image_type = GTK_CSS_IMAGE_BUILTIN_OPTION;
         }
     }
@@ -239,7 +241,13 @@ gtk_model_button_update_state (GtkModelButton *button)
     }
 
   gtk_builtin_icon_set_image (GTK_BUILTIN_ICON (button->indicator_gadget), image_type);
-  gtk_css_gadget_set_state (button->indicator_gadget, state);
+
+  if (button->iconic)
+    gtk_css_gadget_set_state (button->gadget, indicator_state);
+  else
+    gtk_css_gadget_set_state (button->gadget, state);
+
+  gtk_css_gadget_set_state (button->indicator_gadget, indicator_state);
 }
 
 static void